位图
Window位图有两种类型:一种是GDI位图、一种是DIB位图;
GDI位图由MFC中的CBitmap类来表示,是与设备有关的位图。DIB是设备无关的位图。
CBitmap封装了Windows的GDI位图操作所需的大部分函数,其中LoadBitmap是位图初始化函数。
BOOL LoadBitmap(LPCTSTR lpszResourceName)
BOOL LoadBitmap(UINT nIDResource)
从应用程序中,调用一个位图资源(由nIDResource或lpszRe
sourceName指定)。
若用户直接创建一个位图对象,可使用CBitmap类中的CreateBitmap\CreateBitmapIndirect\CreateCompatibleBitmap
BOOL CreateBitmap(int nW,int nH,UINT nPlanes,
UINT nBitcount,
Const void * lpBits);
nPlanes 位图的颜色位数目
nBitcount 每个像素的颜色位数目
lpBits 包含位值得短整型数组
BOOL CreateBitmapIndirect(LPBITMAP lpBitmap)
此函数直接用BITMAP结构创建一个位图对象
BOOL CreateCompatibleBitmap(CDC*pDC,int nW,int nH)
此函数为某设备环境创建一个指定宽度高度的位图对象。
由于位图不能直接显示在实际设备中,因此对于GDI位图的显示要遵循以下步骤:
1) 调用CBitmap类的CreateBitmap\CreateBitmapIndirect\CreateCompatibleBitmap
创建一个适当的位图对象
2) 调用CDC::CreateCompatibleDC创建一个内存环境,以
便位图在内存中保存下来,并与指定设备环境相兼容。
3) 调用CDC::SelectObject函数将位图对象选入内存设备环境中
4) 调用CDC::BitBlt或CDC::StretchBlt函数将位图复制
到实际设备环境中
5) 使用之后,恢复原来的内存设备环境
示例:
CBitmap bmp;
bmp.LoadBitmap(IDB_BITMAP1);
BITMAP bm;
bmp.GetObject(sizeof(BITMAP),&bm);
CDC dcMem;
dcMem.CreateCompatibleDC(pDC);
CBitmap *pOldBitmap=dcMem.SelectObject(&bmp);
pDC->BitBlt(80,80,bm.bmWidth,bm.bmHeight,&dcMem,0,0,SRCCOPY);
dcMem.SelectObject(pOldBmp);
通过上述代码可以看出,位图的最终显示是通过调用CDC::BitBlt函数来完成的。除此之外,也可以使用CDC::StretchBlt函数。
两者区别:StretchBlt可以伸缩,而BitBlt则不能
他们的原型如下:
BOOL BitBlt(int x,int y,int nW,int nH,CDC* pSrcDC,int nxSrc,int nySrc,DWORD dwRop);
BOOL StretchBlt(int x,int y,int nW,int nH,CDC* pSrcDC,int xSrc,int ySrc,
int nSrcWidth,int nSrcHeight,DWORD dwRop)
dwRop 显示位图的光栅操作方式
常用的是SRCCOPY 直接将位图复制到目标环境中